package fr.upstlse.glre.client.controler;

import java.util.List;

import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.ui.SuggestOracle;

import fr.upstlse.glre.client.vo.communiquer.BoiteAuxLettresVOGWT;
import fr.upstlse.glre.client.vo.communiquer.MessageVOGWT;
import fr.upstlse.glre.client.vo.user.EtudiantSearchCriteriaVOGWT;
import fr.upstlse.glre.client.vo.user.EtudiantVOGWT;
import fr.upstlse.glre.client.vo.user.ProfesseurVOGWT;
import fr.upstlse.glre.client.vo.user.UserSearchCriteriaVOGWT;
import fr.upstlse.glre.client.vo.user.UserVOGWT;

public interface UserControlerService extends RemoteService {
	
	public UserVOGWT login(String pLogin, String pPassword);
	
	public long createUser(UserVOGWT pUserVOGWT);
	public void updateUser(UserVOGWT pUserVOGWT);
	public void deleteUser(UserVOGWT pUserVOGWT);
	public UserVOGWT getUserById(long pUserId);
	public UserVOGWT findByLogin(String pLogin);
	public List<UserVOGWT> findUser(UserSearchCriteriaVOGWT pUserSearchCriteriaVOGWT);
	public List<UserVOGWT> getAllUser();
	
	public List<EtudiantVOGWT> findEtudiant(EtudiantSearchCriteriaVOGWT pEtudiantSearchCriteriaVOGWT);
	public List<UserVOGWT> findEtudiantUser(EtudiantSearchCriteriaVOGWT pEtudiantSearchCriteriaVOGWT);
	public void updateEtudiant(EtudiantVOGWT pEtudiant);
	public EtudiantVOGWT getEtudiantById(long pEtudiantId);
	public long createEtudiant(EtudiantVOGWT pEtudiantVOGWT);
	
	public long createProfesseur(ProfesseurVOGWT pProfesseurVOGWT);
	public void updateProfesseur(ProfesseurVOGWT pProfesseurVOGWT);
	public ProfesseurVOGWT getProfesseurById(long pProfesseurId);
	
	public List<UserVOGWT> findByNom(String pNom);
	
	public BoiteAuxLettresVOGWT findByProprietaire(UserVOGWT pUserVOGWT);
	public void envoyer(MessageVOGWT pMessageVOGWT, List<String> pDestinataires);
	public void repondre(MessageVOGWT pMessageVOGWT, MessageVOGWT pReponse);
	
	public void updateMessage(MessageVOGWT pMessageVOGWT);
	
	public SuggestOracle.Response getEmails(SuggestOracle.Request pRequest);
	public MessageVOGWT findMessageById(long messsageId);
}
